Fork me on GitHub

SpringMVC 拦截器

注意:所有文章除特别说明外,转载请注明出处.

SpringMVC 中的拦截器

Spring提供了HandlerInterceptor接口和HandlerInterceptorAdapter适配器。实现这个接口或继承此类,就可以实现自己的拦截器。接口HandlerInterceptor包含三个方法,每个方法的参数handler,用来指向下一个拦截器。此类似于Servlet开发中的Filter,用于对请求进行拦截和处理。

1.Spring MVC拦截器使用方法

1.配置文件

定义在springmvc.xml配置下的<mvc:interceptor>表示对特定的请求进行拦截。

<mvc:interceptors>
<!--对所有的请求进行拦截-->
<!--<beans:beanclass="com.sunp.common.interceptor.Myinterceptor"/>-->
    <!--对特定的请求进行拦截-->
    <mvc:interceptor>
        <!--进行拦截的路径-->
        <mvc:mapping path="/**"/> 
        <!--不进行拦截的路径-->   
        <mvc:exclude-mapping path="/lib/**" /> 
        <beans:bean class="com.sunp.common.interceptor.Myinterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

2.实现接口并且继承方法(同时包含多个实现类)

public class myInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandler(HttpServletRequest request, HttpServletResponse response, Object obj)throws Exception{
    //该方法将在请求处理之前进行调用,只有该方法返回true,才会继续执行后续的Interceptor和Controller
    //当返回值为true 时就会继续调用下一个Interceptor的preHandle方法
    //如果已经是最后一个Interceptor的时候就会是调用当前请求的Controller方法
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object obj,Exception e)throws Exception {
    //在整个请求结束之后被调用,即就是在DispatcherServlet渲染了对应的视图之后执行(用于进行资源清理工作)
    }

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2,ModelAndView arg3) throws Exception {
    //该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行, 
    //DispatcherServlet进行视图返回渲染之前进行调用,可以在这个方法中对Controller
    //处理之后的ModelAndView 对象进行操作
    } 
}

备注:
    1.preHandle(),在Controller之前执行的预处理,可以进行编码、安全控制等处理
    2.postHandle(),在生成View之前执行的后处理,调用了Service并返回ModelAndView,但未进行页面渲染,可以修改ModelAndView
    3.afterCompletion(),最后执行的返回处理,这时已经进行了页面渲染,可以进行日志记录、释放资源等处理

所以在实现了接口之后,就可以在配置文件中进行拦截器的配置。然后其执行顺序为:preHandler -> Controller -> postHandler -> model渲染-> afterCompletion

注意:如果配置了<mvc:annotation-driven/>,会自动注册DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter这两个bean。这样就不能再注入interceptors属性,也就无法指定拦截器了。

2.应用场景

  • 如检测请求是否具有登录权限,如果没有直接返回到登陆页面。
  • 可以记录请求信息的日志,以便进行信息监控、信息统计等。

本文标题:SpringMVC 拦截器

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 07:59:41

原始链接:http://bangjinhu.github.io/undefined/SpringMVC 中的拦截器/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.